package innerclass;

/**
* 局部内部类
*/

public class LocalInnerClass {

    private int num = 10;
    
    private int testNum = 100;

    private void function1(){}

    public void function(){
        //局部内部类
        //定义在外部类的局部位置，通常在方法中
        class Inner{
            
            private int testNum = 200;

            public void innerFunction1(){
                //访问私有属性
                System.out.println("num: " + num);
                //访问私有方法
                function1();
            }
            
            public void innerFunction2(){
                System.out.println("内部类的testNum：" + testNum);
                //外部类名.this是调用当前方法的外部类的对象
                System.out.println("外部类的testNum: " + LocalInnerClass.this.testNum);
            }
        }

        //在方法function()中通过new创建内部类的实例
        Inner innerInstance = new Inner();
        //测试访问外部类和内部类重名的成员
        innerInstance.innerFunction2();
    }

    public static void main(String[] args) {
        LocalInnerClass OuterInstance = new LocalInnerClass();
        OuterInstance.function();
    }

}
